package Day13.Demo02.Map;

/**
 * @author hyhWTX
 * @version 1.0
 * @ClassName Demo01HashMap
 * @date 2022年07月16日 17:34
 * @Description: HashMap存储自定义类型键值Map集合
 */

import java.util.HashMap;
import java.util.Map;
import java.util.Set;



/**
 * HashMap存储自定义类型键值Map集合保让key是唯一的:
 * 作为key的元素,必须重写hashcode方法和equals方法,以保证key唯一
 */
public class Demo01HashMap {
    public static void main(String[] args) {
//      show01();  
        show02();
    }

    /**
     *HashMap存储自定义类型键值
     * key : Person类型
     *      Person类就必须重写hashcode方法和equals方法,以保证key唯一
     * vaLue: String类型
     *      可以重复
     */
    private static void show02() {

        //创建HashMap集合
        HashMap<Person,String> map = new HashMap<>();
        //向集合中添加元素
        map.put(new Person("女王",18),"英国");
        map.put(new Person("秦始皇",35),"大秦帝国");
        map.put(new Person("普京大帝",60),"俄罗斯");
        map.put(new Person("女王",18),"美国");

        //使用entrySet和增强for遍历Map集合
        Set<Map.Entry<Person, String>> set = map.entrySet();
        for (Map.Entry<Person, String> entry : set) {
            Person key = entry.getKey();
            String value = entry.getValue();
            System.out.println(key+"-->"+value);
        }

    }


    /**
     * HashMop存储自定义类型键值
     * key : String类型
     *      String类重写hashcode方法和equals方法,可以保证key唯一
     * vaLue : Person英型
     *      value可以重复(同名同年龄的人视为同一个)
     */
    private static void show01() {
        //创建HashMap集合
        HashMap<String, Person> map = new HashMap<>();

        //集合中添加元素
        map.put("北京",new Person("张三",18));
        map.put("上海",new Person("李四",19));
        map.put("广州",new Person("王五",20));
        map.put("北京",new Person("赵四",18));

        //遍历Map集合，使用KeySet方法加增强for
        Set<String> set = map.keySet();
        for (String key : set) {
            Person value = map.get(key);
            System.out.println(key+"-->"+value);
        }

    }
}
